package org.ch02.test03;

import org.ch02.entity.Student;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * 反射常用 API - Field - 类的属性（字段）
 *
 * @author lwj
 * @date 2025-03-18
 * @vesion 1.0.0
 */
public class MainTest03 {
    public static void main(String[] args) {
        // 第一：获取操作类的 Class 对象
        Class<?> clazz = Student.class;

        // 第二：基于 Class  对象，实现相关的操作 - 运行时，动态性 - 框架，工具
        // Class 对象可以获取类的所有信息（对象）
        // 1.获取类中所有的字段（属性）
        Field[] fields = clazz.getDeclaredFields();

        // 2.循环遍历
        for (Field field : fields) {
            // 3.获取字段（属性）的修饰符 - 整型的表示
            int modifiers = field.getModifiers();
            System.out.println("字段修饰符（整型的表示）："+modifiers);

            // 4.获取字段（属性）的修饰符 - 字符串的表示
            String modifierStr = Modifier.toString(modifiers);
            System.out.println("字段修饰符（字符串的表示）："+modifierStr);

            // 5.获取字段（属性）的数据类型 - 数据类型的 Class 对象
            Class<?> type = field.getType();
            String typeName = type.getName();
            String simpleTypeName = type.getSimpleName();
            System.out.println("字段数据类型(包名.类名)："+typeName);
            System.out.println("字段数据类型(类名 | 名称)："+simpleTypeName);

            // 6.判断类型是否为基本数据类型
            boolean primitive = type.isPrimitive();
            System.out.println("是否为基本数据类型："+primitive);

            // 7.获取字段（属性）的名称
            System.out.println("字段名称："+field.getName());

            System.out.println("-----------------------");
        }
    }
}
